<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
/*
* 「快乐数」定义为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和，然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。如果 可以变为  1，那么这个数就是快乐数。

如果 n 是快乐数就返回 True ；不是，则返回 False 。

示例：

输入：19
输出：true
解释：
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
*
*
* */
function getN(n) {
  if (n == 1 || n == 0) return n;
  let res = 0;
  while (n) {
    res += (n % 10) * (n % 10);
    n = parseInt(n / 10);
  }
  return res;
}

var isHappy = function(n) {
  const sumSet = new Set();
  while (n != 1 && !sumSet.has(n)) {
    sumSet.add(n);
    n = getN(n);
  }
  return n == 1;
};

// 使用环形链表的思想 说明出现闭环 退出循环
var isHappy = function(n) {
  if (getN(n) == 1) return true;
  let a = getN(n), b = getN(getN(n));
  // 如果 a === b
  while (b !== 1 && getN(b) !== 1 && a !== b) {
    a = getN(a);
    b = getN(getN(b));
  }
  return b === 1 || getN(b) === 1 ;
};

var a = 47
console.log(isHappy(a))
</script>
</body>
</html>